package br.com.jmed.control;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.inject.Inject;

import br.com.jmed.model.Materiai;
import br.com.jmed.service.MateriaiService;

@ManagedBean(name = "materiaiControl")
@SessionScoped
public class MateriaiControl extends BaseControl implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@EJB
	private MateriaiService materiaiService;

	@Inject
	private Materiai materiai;

	private Materiai materiaiSelect;

	private List<Materiai> listMateriai;

	public String salvarCadastroMateriai() throws IOException {
		listMateriai = new ArrayList<Materiai>();
		materiai.setUsuarioInclusao(getUsuario());
		materiai.setDataInclusao(new Date());
		materiaiService.salvarMateriai(materiai);
		this.materiai = new Materiai();
		return "/pages/materiai/materiaiBusca.xhtml";
	}

	public String novoCadastroMateriai() throws IOException {
		this.materiai = new Materiai();
		this.listMateriai = new ArrayList<Materiai>();
		return "/pages/materiai/materiaiIncluir.xhtml";
	}

	public String alterarCadastroMateriai() throws IOException {
		listMateriai = new ArrayList<Materiai>();
		materiaiSelect.setUsuarioAlteracao(getUsuario());
		materiaiSelect.setDataAlteracao(new Date());
		materiaiService.atualizarMateriai(materiaiSelect);
		materiaiSelect = new Materiai();
		return "/pages/materiai/materiaiBusca.xhtml";
	}

	public String abrirAlterarMateriai(Materiai materiai) {
		this.materiaiSelect = materiaiService.findMateriaiByCod(materiai
				.getCodigo());
		return "/pages/materiai/materiaiAlterar.xhtml";
	}

	public void pesquisarMateriai() {
		listMateriai = new ArrayList<Materiai>();
		if (materiai.getCodigo() != 0) {
			materiai = materiaiService.findMateriaiByCod(materiai.getCodigo());
			listMateriai.add(materiai);
		} else if (!materiai.getDescricao().trim().equals("")) {
			listMateriai = materiaiService.findMateriaiByNome(materiai
					.getDescricao());
		} else {
			listMateriai = materiaiService.findAllMateriais();
		}

		materiai = new Materiai();
	}

	public List<String> pesquisarAutoCompMateriai(String prefix) {
		List<String> toReturn = new ArrayList<String>();
		listMateriai = new ArrayList<Materiai>();
		listMateriai = materiaiService.findAllMateriais();
		for (Materiai m : listMateriai) {
			if (m.getDescricao().startsWith(prefix)) {
				toReturn.add(m.getDescricao());
			}
		}
		return toReturn;
	}

	public MateriaiService getMateriaiService() {
		return materiaiService;
	}

	public void setMateriaiService(MateriaiService materiaiService) {
		this.materiaiService = materiaiService;
	}

	public Materiai getMateriai() {
		return materiai;
	}

	public void setMateriai(Materiai materiai) {
		this.materiai = materiai;
	}

	public Materiai getMateriaiSelect() {
		return materiaiSelect;
	}

	public void setMateriaiSelect(Materiai materiaiSelect) {
		this.materiaiSelect = materiaiSelect;
	}

	public List<Materiai> getListMateriai() {
		return listMateriai;
	}

	public void setListMateriai(List<Materiai> listMateriai) {
		this.listMateriai = listMateriai;
	}
}